import app from './app.js';
import dotenv from 'dotenv';

// 加载环境变量
dotenv.config();

const PORT = process.env.PORT || 3000;
const HOST = process.env.HOST || '0.0.0.0'; // 使用 0.0.0.0 监听所有网络接口

// 启动服务器
const server = app.listen(PORT, HOST, () => {
  console.log(`
╔══════════════════════════════════════════════════════════╗
║                                                          ║
║   🚀 AI Essay Correction Server                         ║
║                                                          ║
║   Environment: ${process.env.NODE_ENV?.padEnd(10)}                         ║
║   Server:      http://localhost:${PORT}                 ║
║   API Docs:    http://localhost:${PORT}/api             ║
║   Health:      http://localhost:${PORT}/health          ║
║                                                          ║
║   Status: ✅ Server is running                          ║
║                                                          ║
╚══════════════════════════════════════════════════════════╝
  `);
});

// 监听启动错误
server.on('error', (err) => {
  if (err.code === 'EACCES') {
    console.error(`
╔══════════════════════════════════════════════════════════╗
║  ❌ 端口访问权限错误                                      ║
╚══════════════════════════════════════════════════════════╝

错误详情: 无法绑定到端口 ${PORT}

可能的原因:
  1. 端口 ${PORT} 已被其他程序占用
  2. 需要管理员权限才能使用此端口

解决方案:
  1. 运行端口清理脚本:
     > cd backend/scripts
     > kill-port-3000.bat
  
  2. 或者更换端口 (修改 .env 文件):
     PORT=3001
  
  3. 或者以管理员身份运行:
     右键 > 以管理员身份运行

更多帮助请查看: backend/scripts/README.md
`);
    process.exit(1);
  } else if (err.code === 'EADDRINUSE') {
    console.error(`
╔══════════════════════════════════════════════════════════╗
║  ❌ 端口已被占用                                          ║
╚══════════════════════════════════════════════════════════╝

端口 ${PORT} 正在被其他程序使用！

请运行以下命令查看占用情况:
  > netstat -ano | findstr :${PORT}

快速解决:
  > cd backend/scripts
  > kill-port-3000.bat
`);
    process.exit(1);
  } else {
    console.error('服务器启动失败:', err);
    process.exit(1);
  }
});

// 优雅关闭
process.on('SIGTERM', () => {
  console.log('SIGTERM signal received: closing HTTP server');
  server.close(() => {
    console.log('HTTP server closed');
    process.exit(0);
  });
});

process.on('SIGINT', () => {
  console.log('\nSIGINT signal received: closing HTTP server');
  server.close(() => {
    console.log('HTTP server closed');
    process.exit(0);
  });
});

// 未捕获的异常处理
process.on('uncaughtException', (err) => {
  console.error('Uncaught Exception:', err);
  process.exit(1);
});

process.on('unhandledRejection', (reason, promise) => {
  console.error('Unhandled Rejection at:', promise, 'reason:', reason);
  process.exit(1);
});

export default server;

